package ReflectionTest;

class Parent {
    static int staticField = 100;
    static {
        System.out.println("Parent static block, staticField: " + staticField);
    }
}

class Child extends Parent {
    static {
        System.out.println("Child static block");
    }
}

public class ClassInitTest {
    public static void main(String[] args) {
        // 1. 通过子类引用父类的静态字段，不会导致子类初始化
        System.out.println(Child.staticField);

        // 2. 通过数组定义来引用类，不会触发此类的初始化
        Parent[] parents = new Parent[10];

        // 3. 引用类的常量，不会触发此类的初始化
        System.out.println(Parent.staticField);

        // 4. 通过类的Class对象来引用类，不会触发类的初始化
        try {
            Class.forName("ReflectionTest.Parent");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        // 5. 访问非真实定义在类的静态字段，不会触发此类的初始化
        System.out.println(Child.staticField);
    }
}
